import axios from 'axios';
import {Loading, Message} from 'element-ui';
import {saveAs} from 'file-saver';
import {getToken} from '@/utils/auth';
import errorCode from '@/utils/errorCode';
import {blobValidate} from '@/utils/ruoyi';

const baseURL = process.env.VUE_APP_BASE_API;
let downloadLoadingInstance;

export default {
  oss(ossId) {
    var url = baseURL + '/system/oss/download/' + ossId;
    downloadLoadingInstance = Loading.service({
      text: '正在下载数据，请稍候',
      spinner: 'el-icon-loading',
      background: 'rgba(0, 0, 0, 0.7)',
    });
    axios({
      method: 'get',
      url: url,
      responseType: 'blob',
      headers: {Authorization: 'Bearer ' + getToken()},
    })
      .then(res => {
        const isBlob = blobValidate(res.data);
        if (isBlob) {
          const blob = new Blob([res.data], {
            type: 'application/octet-stream',
          });
          this.saveAs(
            blob,
            decodeURIComponent(res.headers['download-filename']),
          );
        } else {
          this.printErrMsg(res.data);
        }
        downloadLoadingInstance.close();
      })
      .catch(r => {
        console.error(r);
        Message.error('下载文件出现错误，请联系管理员！');
        downloadLoadingInstance.close();
      });
  },
  contractTemplate(id) {
    var url =
      baseURL +
      '/contractTemplate/contractTemplate/downloadContractContent/' +
      id;
    downloadLoadingInstance = Loading.service({
      text: '正在下载模版，请稍候',
      spinner: 'el-icon-loading',
      background: 'rgba(0, 0, 0, 0.7)',
    });
    axios({
      method: 'get',
      url: url,
      responseType: 'blob',
      headers: {Authorization: 'Bearer ' + getToken()},
    })
      .then(res => {
        const isBlob = blobValidate(res.data);
        if (isBlob) {
          const blob = new Blob([res.data], {
            type: 'application/octet-stream',
          });
          this.saveAs(
            blob,
            decodeURIComponent(res.headers['download-filename']),
          );
        } else {
          this.printErrMsg(res.data);
        }
        downloadLoadingInstance.close();
      })
      .catch(r => {
        console.error(r);
        Message.error('下载文件出现错误，请联系管理员！');
        downloadLoadingInstance.close();
      });
  },
  contractTemplateRawdata(id) {
    return new Promise(resolve => {
      var url =
        baseURL +
        '/contractTemplate/contractTemplate/downloadContractContent/' +
        id;

      axios({
        method: 'get',
        url: url,
        responseType: 'blob',
        headers: {Authorization: 'Bearer ' + getToken()},
      })
        .then(res => {
          console.log(res);
          if (res.status == 200) {
            resolve(res.data);
          } else {
            Message.error('查看源文件出现错误，请联系管理员！');
            resolve();
          }
        })
        .catch(r => {
          console.error(r);
          Message.error('查看源文件出现错误，请联系管理员！');
          resolve();
        });
    });
  },
  zip(url, name) {
    var url = baseURL + url;
    downloadLoadingInstance = Loading.service({
      text: '正在下载数据，请稍候',
      spinner: 'el-icon-loading',
      background: 'rgba(0, 0, 0, 0.7)',
    });
    axios({
      method: 'get',
      url: url,
      responseType: 'blob',
      headers: {
        Authorization: 'Bearer ' + getToken(),
        datasource: localStorage.getItem('dataName'),
      },
    })
      .then(res => {
        const isBlob = blobValidate(res.data);
        if (isBlob) {
          const blob = new Blob([res.data], {
            type: 'application/zip',
          });
          this.saveAs(blob, name);
        } else {
          this.printErrMsg(res.data);
        }
        downloadLoadingInstance.close();
      })
      .catch(r => {
        console.error(r);
        Message.error('下载文件出现错误，请联系管理员！');
        downloadLoadingInstance.close();
      });
  },
  saveAs(text, name, opts) {
    saveAs(text, name, opts);
  },
  ossB(ossId) {
    const url = `${baseURL}/system/oss/download/${ossId}`;
    // downloadLoadingInstance = Loading.service({
    //   text: '正在下载数据，请稍候',
    //   spinner: 'el-icon-loading',
    //   background: 'rgba(0, 0, 0, 0.7)',
    // });

    return new Promise((resolve, reject) => {
      axios({
        method: 'get',
        url: url,
        responseType: 'blob',
        headers: {Authorization: `Bearer ${getToken()}`},
      })
        .then(res => {
          const isBlob = blobValidate(res.data);
          if (isBlob) {
            const blob = new Blob([res.data], {
              type: 'application/octet-stream',
            });
            resolve( blob);
          } else {
            this.printErrMsg(res.data);
            reject(res.data); // 拒绝并传递错误信息
          }
          // downloadLoadingInstance.close();
        })
        .catch(error => {
          console.error(error);
          Message.error('下载文件出现错误，请联系管理员！');
          // downloadLoadingInstance.close();
          reject(error); // 拒绝并传递错误信息
        });
    });
  },

  async printErrMsg(data) {
    const resText = await data.text();
    const rspObj = JSON.parse(resText);
    const errMsg =
      errorCode[rspObj.code] || rspObj.msg || errorCode['default'];
    Message.error(errMsg);
  },
};
